package String_demo;

public class StringDemo02 {
    public static final String A = "abc";
    public static final String AA = "abcd";
    public static void main(String[] args) {
        /**
         * 字符串对象是不可改变的;
         * 字符串一旦创建，就不在改变;
         */
        String s1 = "123";
        String s2 = "abc";
        String s3 = s1;
        s1 = s1 + s2;
        System.out.println(s1);
        /***
         * 字符串常量池:
         * 1.通过 双引号 创建字符串字面量:
         * 同样内容的字面量对象，会替换为常量池中的同一个对象的引用;(引用同一个对象)
         * 可以通过" == "进行检查地址是否一致;
         * 2.通过 new 创建对象，不会被放到常量池:
         * 也不会重复的利用常量池中的字符串对象;
         * 3.字符串常量在内容相同时也会替换为同样的引用;
         * 4.字符串常量链接结果内容相同时也会替换为相同的内容;
         */
        String a1 = "abc";
        String a2 = "abc";
        System.out.println(a1==a2);//true

        char[] chs = {'a','b','c'};
        String a3 = new String(chs);
        System.out.println(a1==a3);//false

        System.out.println(a1==A);//true
        String a4 = "ab"+"c";//静态字符串链接
        System.out.println(a1==a4);//true

        String a5 = "a";
        String a6 = "bc";
        String a7 = a5+a6;//动态字符串链接(有一个为变量则为动态字符串链接); 引用一个新对象
        System.out.println(a1==a7);//false

        //如下代码创建了几个对象(字符串对象)
        //结论： 上述代码创建了 , 两个字符串对象;
        String str = new String("ABC");


    }
}
